package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.RowEditEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteServicio;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.entidad.ProveedorServicio;
import pe.com.cotelasa.scp.entidad.Servicio;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

@Named(value = "MBComponenteServicio")
@Scope("request")
public class MBComponenteServicio extends MBGenerico implements Serializable {

    @Inject
    private BKComponenteServicio bkComponenteServicio;
    @Autowired
    BKSession session;

    public void eliminarServicio(ActionEvent actionEvent) {
        ProveedorServicio servicioEliminado = this.bkComponenteServicio.getCurrentServicio();

        if (servicioEliminado.getProveedor() == null) {
            Iterator itr = this.bkComponenteServicio.getListaServicio().iterator();
            while (itr.hasNext()) {
                ProveedorServicio prov = (ProveedorServicio) itr.next();
                if (servicioEliminado.getServicio().equals(prov.getServicio())) {
                    itr.remove();
                    break;
                }
            }
        } else {
            this.bkComponenteServicio.getListaServicio().remove(servicioEliminado);
            Integer index = bkComponenteServicio.getListaServicioEditar().indexOf(servicioEliminado);
            servicioEliminado.setEstadoRegistro(ESTADO_REGISTRO.INACTIVO.getValor());
            servicioEliminado.setFecModificacion(new Date());
            servicioEliminado.setUsrModificacion(session.getUsuario().getUsuario());
            this.bkComponenteServicio.getListaServicioEditar().set(index, servicioEliminado);
        }
    }

    public void agregarServicio(ActionEvent actionEvent) {
        List<ProveedorServicio> listaAgregar = new ArrayList<ProveedorServicio>();

        for (Servicio serv : this.bkComponenteServicio.getListaServicioElegidos()) {

            ProveedorServicio servicioAgregado = new ProveedorServicio();

            servicioAgregado.setUsrCreacion(session.getUsuario().getUsuario());
            servicioAgregado.setFecCreacion(new Date());
            servicioAgregado.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            servicioAgregado.setServicio(serv);

            boolean band = true;
            for (ProveedorServicio prov : this.bkComponenteServicio.getListaServicio()) {
                if (servicioAgregado.getServicio().equals(prov.getServicio())) {
                    band = false;
                    break;
                }
            }
            if (band) {
                listaAgregar.add(servicioAgregado);
            }

        }

        this.bkComponenteServicio.getListaServicio().addAll(listaAgregar);
        this.bkComponenteServicio.getListaServicioEditar().addAll(listaAgregar);
        this.bkComponenteServicio.setFormularioServicio(new ProveedorServicio());
        this.bkComponenteServicio.setListaServicioElegidos(new ArrayList<Servicio>());
    }

    public void editarServicio(RowEditEvent event) {
        ProveedorServicio servicioEditado = (ProveedorServicio) event.getObject();
        Integer index = this.bkComponenteServicio.getListaServicioEditar().indexOf(servicioEditado);

        if (servicioEditado.getProveedor() != null) {

            servicioEditado.setUsrModificacion(session.getUsuario().getUsuario());
            servicioEditado.setFecModificacion(new Date());
        }

        this.bkComponenteServicio.getListaServicioEditar().set(index, servicioEditado);
    }
}
